﻿using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using vudu.EnlaceDatos.SqlServer;
using vudu.Logica.Clases;

namespace vudu.PaginasWeb.G1EsquemaEvaluacion
{
    public partial class ModificarEsquemaEvaluacionProfesor1 : System.Web.UI.Page
    {
        private Evaluacion _evaluacion = new Evaluacion();
        private int _idSeccion;
        private List<Evaluacion> _misEvaluaciones = new List<Evaluacion>();
        private Profesor profesor = new Profesor();
 
        protected void Page_Load(object sender, EventArgs e)
        {
            _idSeccion = Convert.ToInt32(Request.QueryString["cod"]);

            profesor = (Profesor) Session["usuario"];
            //profesor.Nombre = "Carlo";
            //profesor.Apellido = "Magurno";

            //esto no se quita en la integracion
            InFormacionProfesor.Text = "Profesor(a) : " + profesor.Nombre + " " + profesor.Apellido;
            LlenarCabecerasTablaEsquemaEvaluacion();
            CargarInformacionTabla();
        }

        /// <summary>
        /// Funcion que sirve para insertar las cabeceras a la table de esquemaEvaluacion.
        /// </summary>
        public void LlenarCabecerasTablaEsquemaEvaluacion()
        {
            // Creamos un nuevo registro para la tabla
            TableRow registroTabla = new TableRow();
            EsquemaEvaluacion.Rows.Add(registroTabla);
            // Creamos una celda para esta tabla.
            TableCell celdaTabla = new TableCell();
            celdaTabla.Width = 150;
            celdaTabla.HorizontalAlign = HorizontalAlign.Center;
            registroTabla.Cells.Add(celdaTabla);
            // Creamos un WebControl de tipo "LABEL" y se lo aderimos a la celda.
            System.Web.UI.WebControls.Label labelCabecera = new Label();
            labelCabecera.Text = "Tipo";
            celdaTabla.Controls.Add(labelCabecera);

            //Repetimos el procedimiento hasta llenar nuestra tabla.
            celdaTabla = new TableCell();
            celdaTabla.Width = 150;
            celdaTabla.HorizontalAlign = HorizontalAlign.Center;
            registroTabla.Cells.Add(celdaTabla);
            labelCabecera = new Label();
            labelCabecera.Text = "Nombre";
            celdaTabla.Controls.Add(labelCabecera);

            celdaTabla = new TableCell();
            celdaTabla.Width = 150;
            celdaTabla.HorizontalAlign = HorizontalAlign.Center;
            registroTabla.Cells.Add(celdaTabla);
            labelCabecera = new Label();
            labelCabecera.Text = "Porcentaje";
            celdaTabla.Controls.Add(labelCabecera);

            celdaTabla = new TableCell();
            celdaTabla.Width = 150;
            celdaTabla.HorizontalAlign = HorizontalAlign.Center;
            registroTabla.Cells.Add(celdaTabla);
            labelCabecera = new Label();
            labelCabecera.Text = "Fecha Tentativa";
            celdaTabla.Controls.Add(labelCabecera);

            celdaTabla = new TableCell();
            celdaTabla.Width = 150;
            celdaTabla.HorizontalAlign = HorizontalAlign.Center;
            registroTabla.Cells.Add(celdaTabla);
            labelCabecera = new Label();
            labelCabecera.Text = "Opcion";
            celdaTabla.Controls.Add(labelCabecera);
        }
        
        /// <summary>
        /// Funcion para cargar la informacion de secciones para un profesor en la tabla.
        /// </summary>
        public void CargarInformacionTabla()
        {
            try
            {
                //Recorremos la lista de todas las secciones de un profesor.
                SeccionMateria seccionMateria = new SeccionMateria();
                seccionMateria.IdSeccionMateria = _idSeccion;
                foreach (Evaluacion miEvaluacion in _evaluacion.ConsultarEsquemaEvaluacionSeccion(seccionMateria))
                {
                    // Creamos un nuevo registro para la tabla
                    TableRow registroTabla = new TableRow();
                    EsquemaEvaluacion.Rows.Add(registroTabla);

                    // Creamos una celda para esta tabla.
                    TableCell celdaTabla = new TableCell();
                    registroTabla.Cells.Add(celdaTabla);
                    // Creamos un WebControl de tipo "LABEL" y se lo aderimos a la celda.
                    System.Web.UI.WebControls.Label labelRegistro = new Label();
                    labelRegistro.Text = miEvaluacion.TipoEvaluacion;
                    celdaTabla.Controls.Add(labelRegistro);

                    celdaTabla = new TableCell();
                    celdaTabla.HorizontalAlign = HorizontalAlign.Center;
                    registroTabla.Cells.Add(celdaTabla);
                    // Creamos un WebControl de tipo "LABEL" y se lo aderimos a la celda.
                    labelRegistro = new Label();
                    labelRegistro.Text = miEvaluacion.Nombre;
                    celdaTabla.Controls.Add(labelRegistro);

                    celdaTabla = new TableCell();
                    celdaTabla.HorizontalAlign = HorizontalAlign.Center;
                    registroTabla.Cells.Add(celdaTabla);
                    // Creamos un WebControl de tipo "LABEL" y se lo aderimos a la celda.
                    labelRegistro = new Label();
                    labelRegistro.Text = miEvaluacion.Porcentaje.ToString();
                    celdaTabla.Controls.Add(labelRegistro);

                    celdaTabla = new TableCell();
                    celdaTabla.HorizontalAlign = HorizontalAlign.Center;
                    registroTabla.Cells.Add(celdaTabla);
                    // Creamos un WebControl de tipo "LABEL" y se lo aderimos a la celda.
                    labelRegistro = new Label();
                    labelRegistro.Text = miEvaluacion.FechaEvaluacion.ToString().Split(' ')[0];
                    celdaTabla.Controls.Add(labelRegistro);

                    celdaTabla = new TableCell();
                    celdaTabla.HorizontalAlign = HorizontalAlign.Center;
                    registroTabla.Cells.Add(celdaTabla);
                    // Creamos un WebControl de tipo "BUTTON" y se lo aderimos a la celda.
                    System.Web.UI.WebControls.Button buttonAgregarEsquema = new Button();
                    buttonAgregarEsquema.CssClass = "boton";
                    buttonAgregarEsquema.Text = "Modificar evaluacion";
                    buttonAgregarEsquema.ID = miEvaluacion.IdEvaluacion.ToString();
                    buttonAgregarEsquema.Click += new EventHandler(AccionBotonModificarEvaluacion);
                    celdaTabla.Controls.Add(buttonAgregarEsquema);

                    _misEvaluaciones.Add(miEvaluacion);
                }
            }
            catch (Exception)
            {
                MensajeDeTransaccion.Text = "Operacion Fallida : No se pudo establecer conexion con la Base de Datos";
                MensajeDeTransaccion.CssClass = "transaccionFallida";
                MensajeDeTransaccion.Visible = true;
            }
        }

        public void AccionBotonModificarEvaluacion(Object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            int idEvaluacion = Convert.ToInt32(clickedButton.ID);

            Evaluacion evaluacionAModificar = BuscarEvaluacionEnLista(idEvaluacion);
            LlenarFormularioConInformacion(evaluacionAModificar);
            PanelModificar.Visible = true;
            MensajeDeTransaccion.Visible = false;
            Session["idModificar"] = idEvaluacion;
        }

        public Evaluacion BuscarEvaluacionEnLista(int idEvaluacion)
        {
            Evaluacion evaluacion = new Evaluacion();
            foreach (Evaluacion miEvaluacion in _misEvaluaciones)
            {
                if (miEvaluacion.IdEvaluacion == idEvaluacion)
                {
                    evaluacion = miEvaluacion;
                }
            }
            return evaluacion;
        }

        public void LlenarFormularioConInformacion(Evaluacion evaluacion)
        {
            TipoEvaluacion.Text = evaluacion.TipoEvaluacion;
            NombreEvaluacion.Text = evaluacion.Nombre;
            PorcentajeEvaluacion.Text = evaluacion.Porcentaje.ToString();
            FechaTentativa.Text = evaluacion.FechaEvaluacion.ToString().Split(' ')[0];
        }

        protected void ModificarEvaluacion(object sender, EventArgs e)
        {
            if (ValidarFormulario())
            {
                Button clickedButton = (Button)sender;

                Evaluacion evaluacionModificar = new Evaluacion();
                evaluacionModificar.IdEvaluacion = (int)Session["idModificar"];
                evaluacionModificar.Nombre = NombreEvaluacion.Text;
                evaluacionModificar.Porcentaje = Convert.ToInt32(PorcentajeEvaluacion.Text);
                evaluacionModificar.FechaEvaluacion = Convert.ToDateTime(FechaTentativa.Text);
                evaluacionModificar.TipoEvaluacion = TipoEvaluacion.Text;

                SqlServerEvaluacion sqlServerEvaluacion = new SqlServerEvaluacion();
                bool modificada = sqlServerEvaluacion.ModificarEvaluacion(evaluacionModificar);

                EsquemaEvaluacion.Rows.Clear();
                LlenarCabecerasTablaEsquemaEvaluacion();
                CargarInformacionTabla();
                PanelModificar.Visible = false;

                if (modificada)
                {
                    MensajeDeTransaccion.Text = "La evaluacion ha sido modificada con exito.";
                    MensajeDeTransaccion.CssClass = "transaccionExitosa";
                    MensajeDeTransaccion.Visible = true;
                }
            }
        }

        #region Funciones utilizadas para validar informacion del formulario
        /// <summary>
        /// Funcion que valida que la informacion del formulario este correcta
        /// </summary>
        /// <returns></returns>
        public bool ValidarFormulario()
        {
            ValidarCampoNombreEvaluacion();
            ValidarCampoPorcentajeEvaluacion();
            ValidarCampoFechaTentativa();
            if (ValidarCampoNombreEvaluacion() && ValidarCampoPorcentajeEvaluacion() && ValidarCampoFechaTentativa())
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// Funcion que valida si la informacion de Campo porcentaje evaluacion es correcta.
        /// </summary>
        /// <param name="numero"></param>
        /// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoPorcentajeEvaluacion()
        {
            if (PorcentajeEvaluacion.Text.Length == 0)
            {
                MensajePorcentajeEvaluacion.Text = "Este campo es obligatorio";
                MensajePorcentajeEvaluacion.Visible = true;
                return false;
            }
            else if (!ValidarSiEsNumero(PorcentajeEvaluacion.Text))
            {
                MensajePorcentajeEvaluacion.Text = "Este campo no puede contener letras";
                MensajePorcentajeEvaluacion.Visible = true;
                return false;
            }
            else
            {
                MensajePorcentajeEvaluacion.Visible = false;
                return true;
            }
        }

        public bool ValidarSiEsNumero(string numero)
        {
            try
            {
                Convert.ToInt32(numero);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// Metodo que valida que un campo realmente sea una fecha
        /// </summary>
        /// <param name="numero"></param>
        /// <returns>retorna true si es fecha, false si no es.</returns>
        public bool ValidarCampoFechaTentativa()
        {
            if (FechaTentativa.Text.Length == 0)
            {
                MensajeFechaTentativa.Text = "Este campo es obligatorio";
                MensajeFechaTentativa.Visible = true;
                return false;
            }
            else if (!ValidarSiEsFecha(FechaTentativa.Text))
            {
                MensajeFechaTentativa.Text = "La fecha no esta en el formato correcto";
                MensajeFechaTentativa.Visible = true;
                return false;
            }
            else
            {
                MensajeFechaTentativa.Visible = false;
                return true;
            }
        }

        public bool ValidarSiEsFecha(string fecha)
        {
            try
            {
                Convert.ToDateTime(fecha);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// Funcion que valida si la informacion de Campo nombre evaluacion es correcta.
        /// </summary>
        /// <param name="nombreEvaluacion"></param>
        /// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoNombreEvaluacion()
        {
            if (NombreEvaluacion.Text.Length == 0)
            {
                MensajeNombreEvaluacion.Visible = true;
                return false;
            }
            else
            {
                MensajeNombreEvaluacion.Visible = false;
                return true;
            }
        }

        #endregion

    }

}